package thread;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

/**
 * 静态方法是如果使用synchronized，那么该方法一定具有同步效果（排队干）
 * 因为静态方法全局只有一份
 * 静态方法使用synchronize后锁对象为当前类对象（class的实例）
 * jvm中每个被加载的类都有仅只有一个 class实例与之对应
 */
public class SyncDemo3 {
    public static void main(String[] args) {
        //就算创建两个类的对象 静态方法被锁住也会排队执行 因为静态方法全局只有一份
        //成员方法可以同时执行
        foo f1 =new foo();
        foo f2 =new foo();
        long start = System.currentTimeMillis();
        Thread t =new Thread(){
            @Override
            public void run() {
                f1.dosome();
            }
        };
        Thread t1 =new Thread(){
            @Override
            public void run() {
                f2.dosome();
            }
        };

        t.start();
        t1.start();
    }
}
class  foo{
    public  static void dosome(){
        //同步块 类对象
        synchronized (foo.class) {
            try {
                Thread t = Thread.currentThread();
                System.out.println(t.getName() + "正在执行静态方法");
                Thread.sleep(5000);
                System.out.println(t.getName() + "结束");

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}
